package com.deng.framework.beans.factory.config;

import com.deng.framework.beans.factory.HierarchicalBeanFactory;
import com.deng.framework.core.convert.ConversionService;
import com.deng.framework.utils.StringValueResolver;
import org.springframework.lang.Nullable;

/**
 * 可获取 BeanPostProcessor(Bean的扩展)、BeanClassLoader(Bean的加载)等的一个配置化接口
 */
public interface ConfigurableBeanFactory extends HierarchicalBeanFactory, SingletonBeanRegistry {

    String SCOPE_SINGLETON = "singleton";

    String SCOPE_PROTOTYPE = "prototype";

    void addBeanPostProcessor(BeanPostProcessor beanPostProcessor);

    /**
     * Add a String resolver for embedded values such as annotation attributes.
     * 注解处理时用到的，不会的话可忽略，不是重点
     */
    void addEmbeddedValueResolver(StringValueResolver valueResolver);

    /**
     * Resolve the given embedded value, e.g. an annotation attribute.
     * 注解处理时用到的，不会的话可忽略，不是重点
     */
    String resolveEmbeddedValue(String value);

    /**
     * 以下两个函数是spring数据转换中新加的，用于spring数据转换FactoryBean的注册与调用
     */
    void setConversionService(ConversionService conversionService);

    @Nullable
    ConversionService getConversionService();
}